iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0

圖形走訪
圖形的走訪目的在於從某個頂點開始,根據不同的方法走訪完全部的頂點,透過圖形的走訪可以判斷圖形是否連通,並且可以得知連通的路徑,走訪的方法分為以下兩種:

  1. 深度優先搜尋法(Depth-First Search, DFS)
    深度優先搜尋法使用到遞迴和堆疊的兩種技巧,選擇圖形中任意一個頂點作為起點開始走訪,拜訪過的頂點就做標記為已拜訪,再將和該頂點相鄰且未拜訪過的其他頂點放入堆疊中,接著從堆疊中取出一個頂點開始新一輪的拜訪,重複以上步驟,直到全部的頂點都被拜訪過。如圖所示:
    https://ithelp.ithome.com.tw/upload/images/20240919/20168780wKsqEYVNzL.png

  2. 廣度優先搜尋法(Breadth-First Search, BFS)
    廣度優先搜尋法使用到遞迴和佇列的兩種技巧,選擇圖形中任意一個頂點作為起點開始走訪,拜訪過的頂點就做標記為已拜訪,再將和該頂點相鄰且未拜訪過的其他頂點放入佇列中,接著從佇列中取出一個頂點開始新一輪的拜訪,重複以上步驟,直到全部的頂點都被拜訪過。如圖所示:
    https://ithelp.ithome.com.tw/upload/images/20240919/20168780TiKvfd8qCG.png


擴張樹
擴張樹是圖形以最少的邊來連結所有頂點,且不會形成循環的樹狀結構。通常一個圖形不只有一棵擴張樹。如圖所示:
https://ithelp.ithome.com.tw/upload/images/20240920/20168780O3J2koorhM.png

有一種擴張樹叫做最小花費擴張樹,顧名思義就是在附有權重值(成本)的圖形中,花費最小成本路徑的擴張樹就是最小花費擴張樹。加權圖形可以透過以下兩種演算法得到最小花費擴張樹:

  1. Prim演算法
    首先選定任意一個頂點作為起點,接著列出所有和該頂點相連的其他頂點,並選擇成本最小的路徑,並將新頂點和路徑放入最小擴張樹,若該路徑會造成循環,則選擇次小的路徑,重複以上步驟,直到所有頂點都放入最小擴張樹中。如圖所示:
    https://ithelp.ithome.com.tw/upload/images/20240920/20168780i9oSBLdP94.png

  2. Kruskal演算法
    首先將各路徑依照權重大小做升序排列,接著從權重最低的路徑開始放入最小擴張樹中,如果該路徑會造成循環,則選擇下一條路徑,重複以上步驟,直到所有頂點都放入最小擴張樹中。如圖所示:
    https://ithelp.ithome.com.tw/upload/images/20240920/20168780dZu19nE8bC.png


參考資料:

  1. 蔡明志 (2017)。《資料結構:使用C語言 (第5版)》。臺北:全華圖書。
  2. 吳燦銘、胡昭民 (2018)。《圖解資料結構:使用Java》。新北:博碩文化。

上一篇
Day9 Graph圖形 - 概念介紹(上)
下一篇
Day11 Graph圖形 - 題目1:200. Number of Islands
系列文
Java刷題A:Leetcode Top 100 Liked26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言